请从实验的网站下载 \texttt{Labsetup.zip} 文件到你的虚拟机中，解压它，
进入 \texttt{Labsetup} 文件夹，然后用 \texttt{docker-compose.yml} 文件安装实验环境。
对这个文件及其包含的所有 \texttt{Dockerfile} 文件中的内容的详细解释都可以
在链接到本实验网站的用户手册 \footnote{
    如果你在部署容器的过程中发现从官方源下载容器镜像非常慢，
    可以参考手册中的说明使用当地的镜像服务器
} 中找到。
如果这是您第一次使用容器设置 SEED 实验环境，那么阅读用户手册非常重要。

在下面，我们列出了一些与 Docker 和 Compose 相关的常用命令。
由于我们将非常频繁地使用这些命令，因此我们在 \texttt{.bashrc} 文件
（在我们提供的 SEEDUbuntu 20.04 虚拟机中）中为它们创建了别名。


\begin{lstlisting}
$ docker-compose build  # Build the container image
$ docker-compose up     # Start the container
$ docker-compose down   # Shut down the container

// Aliases for the Compose commands above
$ dcbuild       # Alias for: docker-compose build
$ dcup          # Alias for: docker-compose up
$ dcdown        # Alias for: docker-compose down
\end{lstlisting}


所有容器都在后台运行。
要在容器上运行命令，我们通常需要获得容器里的 shell 。
首先需要使用 \texttt{docker ps} 命令找出容器的 ID ，
然后使用 \texttt{docker exec} 在该容器上启动 shell 。
我们已经在 \texttt{.bashrc} 文件中为这两个命令创建了别名。

\begin{lstlisting}
$ dockps        // Alias for: docker ps --format "{{.ID}}  {{.Names}}"
$ docksh <id>   // Alias for: docker exec -it <id> /bin/bash

// The following example shows how to get a shell inside hostC
$ dockps
b1004832e275  hostA-10.9.0.5
0af4ea7a3e2e  hostB-10.9.0.6
9652715c8e0a  hostC-10.9.0.7

$ docksh 96
root@9652715c8e0a:/#

// Note: If a docker command requires a container ID, you do not need to
//       type the entire ID string. Typing the first few characters will
//       be sufficient, as long as they are unique among all the containers.
\end{lstlisting}


如果你在设置实验环境时遇到问题，可以尝试从手册的``Miscellaneous Problems''部分中寻找解决方案。
